#ifndef TWOPOINTCROSSOVER_H_
#define TWOPOINTCROSSOVER_H_

#include "../Crossover.h"
#include "../../Solution/BitEncoded/BitEncodedSolution.h"
#include "../../Solution/PermutationEncoded/PermutationEncodedSolution.h"
#include "../../Solution/ValueEncoded/ValueEncodedSolution.h"
#include "../../Random/MyRandom.h"
#include "../../Exception/GA_Exception.h"

/** Implementation of the two point style crossover.
 * A two-point crossover selects two points random from the parents and cuts them at those points, making
 * three "pieces" out of them.  The first and last piece of one parent go to a child and the middle piece
 * goes to the other.
 */
template <typename T> class TwoPointCrossover : public Crossover
{
	public:
		TwoPointCrossover();
		void cross(Solution*, Solution*, Solution* &, Solution* &); /**< Given sets the 2 children to the resulting cross of the given parents */
};

#endif /*TWOPOINTCROSSOVER_H_*/
